#include <iostream>

using namespace std;

//引用做函数的返回值:引用是可以作为函数的返回值存在的
//注意:不要返回局部变量引用

int &test1() {
    int a = 10;//局部变量,存放在栈区
    return a;
}

//用法:函数调用作为左值
int &test2() {
    static int a = 10;//静态变量，存放在全局区，全局区上的数据在程序结束后由系统释放
    return a;
}

int main() {
    int &ref = test1();
    cout << "ref=" << ref << endl;//第一次结果正确，是因为编译器做了保留
    cout << "ref=" << ref << endl;//第二次结果错误，因为a的内存已经释放
    cout << "=========" << endl;
    int &re = test2();
    cout << "re=" << re << endl;
    cout << "re=" << re << endl;
    cout << "re=" << re << endl;
    cout << "=========" << endl;
    test2() = 100;//如果函数的返回值是引用，这个函数调用可以作为左值
    cout << "re=" << re << endl;
    cout << "re=" << re << endl;
    cout << "re=" << re << endl;
    return 0;
}
